package com.lantosec.hmrp.modules.internal.mapper;

import com.lantosec.hmrp.core.kit.PageVO;
import com.lantosec.hmrp.modules.internal.entity.*;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lantosec.hmrp.modules.internal.vo.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * 评价任务 Mapper 接口
 * </p>
 *
 * @author AutoCode
 * @since 2020-04-23
 */
public interface InternalTaskMapper extends BaseMapper<InternalTask> {

    /**
     * 获取被考评方列表
     *
     * @param internalTaskId
     * @return
     */
    List<InternalTaskDetailVO> getInternalTaskDetail(@Param("internalTaskId") Integer internalTaskId, @Param("executorUserId") String executorUserId);

    /**
     * 获取考评方案下的考评项目
     *
     * @param internalPlanId
     * @return
     */
    List<InternalPlanItem> getInternalPlanItem(@Param("internalTypeId") Integer internalTypeId, @Param("internalPlanId") Integer internalPlanId);

    /**
     * 查询考评方案的考评等级
     *
     * @param internalPlanId
     * @return
     */
    List<InternalPlanLevel> getInternalPlanLevel(@Param("internalPlanId") Integer internalPlanId);


    List<InternalTaskVO> getNotFinishAll(PageVO<InternalTaskVO> page, @Param("internalPlanType") Integer internalPlanType, @Param("taskTitle") String taskTitle, @Param("startDate") String startDate,
                                         @Param("endDate") String endDate, @Param("state") Integer state);

    List<InternalTaskVO> getFinishAll(PageVO<InternalTaskVO> page, @Param("internalPlanType") Integer internalPlanType, @Param("taskTitle") String taskTitle, @Param("startDate") String startDate,
                                      @Param("endDate") String endDate, @Param("state") Integer state);

    /**
     * 查询出考评任务下的考评项目分类
     *
     * @return
     */
    List<InternalTypeVO> getInternalType(@Param("internalPlanId") Integer internalPlanId);

    /**
     * 查询被考评对象的考评项目分类
     *
     * @param internalTaskId
     * @param targetId
     * @return
     */
    List<InternalTypeVO> getIntenalType(@Param("internalTaskId") Integer internalTaskId, @Param("targetMode") Integer targetMode, @Param("targetId") String targetId);

    /**
     * 查询被考评对象下的考评记录
     *
     * @param internalTaskId
     * @param targetId
     * @param internalTypeId
     * @return
     */
    List<InternalNoteVO> getInternalNote(@Param("internalTaskId") Integer internalTaskId, @Param("targetMode") Integer targetMode, @Param("targetId") String targetId,
                                         @Param("internalTypeId") Integer internalTypeId, @Param("internalPlanId") Integer internalPlanId);

    /**
     * @param internalPlanId
     * @return
     */
    InternalPlan getInternalPlan(Integer internalPlanId);

    /**
     * 查询被考评科室
     * @param internalPlanId
     * @return
     */
    List<String> getTargetDeptId(Integer internalPlanId);


    /**
     * 获取被考评方列表
     * @param internalTaskId
     * @param deptIds
     * @param executorUserId
     * @return
     */
    List<InternalTaskDetailVO> getDeptInternalTaskDetail(@Param("internalTaskId") Integer internalTaskId, @Param("deptIds") List<String> deptIds,
                                                         @Param("executorUserId") String executorUserId);

    /**
     * 查询全院
     * @param page
     * @param internalPlanType
     * @param taskTitle
     * @param startDate
     * @param endDate
     * @return
     */
    List<InternalTaskVO> getNotFinishAlls(PageVO<InternalTaskVO> page, @Param("internalPlanType") Integer internalPlanType, @Param("taskTitle") String taskTitle,
                                          @Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 查询科室
     * @param page
     * @param internalPlanType
     * @param taskTitle
     * @param startDate
     * @param endDate
     * @param executorDeptId
     * @return
     */
    List<InternalTaskVO> getNotFinishDept(PageVO<InternalTaskVO> page, @Param("internalPlanType") Integer internalPlanType, @Param("taskTitle") String taskTitle,
                                          @Param("startDate") String startDate, @Param("endDate") String endDate, @Param("executorDeptId") String executorDeptId);

    /**
     * 查询个人
     * @param page
     * @param internalPlanType
     * @param taskTitle
     * @param startDate
     * @param endDate
     * @param userId
     * @return
     */
    List<InternalTaskVO> getNotFinishUser(PageVO<InternalTaskVO> page, @Param("internalPlanType") Integer internalPlanType, @Param("taskTitle") String taskTitle,
                                          @Param("startDate") String startDate, @Param("endDate") String endDate, @Param("userId") String userId);

    /**
     *
     * @param page
     * @param internalPlanType
     * @param taskTitle
     * @param startDate
     * @param endDate
     * @param executorDeptId
     * @return
     */
    List<InternalTaskVO> getFinishDept(PageVO<InternalTaskVO> page, @Param("internalPlanType") Integer internalPlanType, @Param("taskTitle") String taskTitle,
                                       @Param("startDate") String startDate, @Param("endDate") String endDate, @Param("executorDeptId") String executorDeptId);

    /**
     *
     * @param page
     * @param internalPlanType
     * @param taskTitle
     * @param startDate
     * @param endDate
     * @param userId
     * @return
     */
    List<InternalTaskVO> getFinishUser(PageVO<InternalTaskVO> page, @Param("internalPlanType") Integer internalPlanType, @Param("taskTitle") String taskTitle,
                                       @Param("startDate") String startDate, @Param("endDate") String endDate, @Param("userId") String userId);

    /**
     *
     * @param page
     * @param internalPlanType
     * @param taskTitle
     * @param startDate
     * @param endDate
     * @return
     */
    List<InternalTaskVO> getFinishAlls(PageVO<InternalTaskVO> page, @Param("internalPlanType") Integer internalPlanType, @Param("taskTitle") String taskTitle,
                                       @Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 查询我的考评任务被考评对象详情
     * @param internalTaskId
     * @param targetMode
     * @return
     */
    List<InternalTaskDetailVO> getInternalTaskTarget(@Param("internalTaskId") Integer internalTaskId, @Param("targetMode") Integer targetMode,@Param("userId")String userId);

    /**
     * 查询科室考评任务被考评对象详情
     * @param internalTaskId
     * @param deptId
     * @return
     */
    List<InternalTaskExecutorVO> getInternalTaskExecutor(@Param("internalTaskId") Integer internalTaskId, @Param("deptId") String deptId);

    /**
     * 查询考评任务的已完成详情
     * @param internalTaskId
     * @param targetMode
     * @return
     */
    List<InternalTaskDetailVO> getInternalTaskFinish(@Param("internalTaskId") Integer internalTaskId, @Param("targetMode") Integer targetMode,@Param("userId") String userId);

    /**
     * 查询考评任务的未完成详情
     * @param internalTaskId
     * @param targetMode
     * @return
     */
    List<InternalTaskDetailVO> getInternalTaskNotFinish(@Param("internalTaskId") Integer internalTaskId, @Param("targetMode") Integer targetMode,@Param("userId") String userId);

    /**
     * 查询科室考评任务已完成对象
     * @param internalTaskId
     * @param deptId
     * @return
     */
    List<InternalTaskDetailVO> getInternalTaskDeptFinish(@Param("internalTaskId") Integer internalTaskId, @Param("deptId") String deptId);

    /**
     * 查询科室考评任务未完成对象
     * @param internalTaskId
     * @param deptId
     * @return
     */
    List<InternalTaskDetailVO> getInternalTaskDeptNotFinish(@Param("internalTaskId") Integer internalTaskId, @Param("deptId") String deptId);

    List<InternalTaskDetailVO> getInternalTaskFinishAll(@Param("internalTaskId") Integer internalTaskId);

    List<InternalTaskDetailVO> getInternalTaskNotFinishAll(@Param("internalTaskId") Integer internalTaskId);
}
